{
  class List<T> {
    pos: number = 0; // 列表中的元素个数
    listSize: number = 0;
    length: number = 0; // 返回列表中的元素个数
    dataStore: T[] = [];
    constructor() {}
    // 清空方法
    clear(): void {
      this.pos = 0;
      this.listSize = 0;
      this.length = 0;
      this.dataStore.length = 0;
    }
    // 返回列表的字符串形式
    toString() {
      return this.dataStore;
    }
    // 返回当前位置的元素
    getElement(): T {
      return this.dataStore[this.pos];
    }
    // 在现有元素后插入新元素
    insert(element: T) {
      this.dataStore.splice(this.pos, 0, element);
    }
    // 在列表的末尾添加新元素
    append(element: T) {
      this.dataStore[this.listSize++] = element;
    }
    // 从列表中删除元素
    remove(element: T): boolean {
      let index = this.find(element);
      if (index === -1) return false;
      this.dataStore.splice(index, 1);
      this.listSize--;
      return true;
    }
    // 将列表的当前位置设移动到第一个元素
    front(): void {
      if (this.pos !== 0) {
        console.log(this.dataStore);
        this.exchange(0, this.pos);
        console.log(this.dataStore);
      }
    }
    // 将列表的当前位置移动到最后一个元素
    end(): void {
      if (this.pos !== this.listSize) {
        this.exchange(this.listSize - 1, this.pos);
      }
    }
    // 将当前位置后移一位
    prev(): void {
      if (this.pos > 0) {
        this.pos--;
      }
    }
    // 将当前位置前移一位
    next(): void {
      if (this.pos < this.listSize) {
        this.pos++;
      }
    }
    // 返回列表的当前位置
    currPos(): number {
      return this.pos;
    }
    // 将当前位置移动到指定位置
    moveTo(pos: number): boolean | number {
      if (pos > this.listSize - 1) {
        return false;
      } else {
        return (this.pos = pos);
      }
    }

    // 工具函数 - 查找一个元素的位置
    find(element: T): number {
      return this.dataStore.indexOf(element);
    }

    exchange(element1: number, element2: number) {
      let temp = this.dataStore[element1];
      this.dataStore[element1] = this.dataStore[element2];
      this.dataStore[element2] = temp;
    }
  }

  let names = new List<String>();
  names.append("jimmy");
  names.append("xuexue");
  names.append("Jack");
  names.append("Henry");
  console.log(names.getElement());
  names.next();
  console.log(names.getElement());
  names.clear();
  names.append("Henry");
  names.append("jimmy");
  names.append("xuexue");
  names.append("Jack");
  names.moveTo(3);
  console.log(names.getElement());
  names.front();
  console.log(names.getElement());
  console.log(names.length);
}
